home *** CD-ROM | disk | FTP | other *** search
- {$S130}
- PROGRAM funktion ;
-
- {-----------------------------------------------------------------------------}
- { (c) Thomas Proffen Mai 1987 }
- {-----------------------------------------------------------------------------}
-
-
- {$I A:\FUNKTION\FUNKTION.I }
- {$I C:\GEM\GEMCONST.PAS }
-
- TYPE {$I C:\GEM\GEMTYPE.PAS }
-
- bild_type = ARRAY [0..16000] OF integer ;
- bild_zeiger = ^bild_type ;
- k_sin_type = RECORD
- name : str255 ;
- wert : real ;
- END ;
- achsen_art_type = (ohne, skala, netz) ;
- draw_type = RECORD
- achsen_art : achsen_art_type ;
- verb, auto, x_log,
- y_log : boolean ;
- x_min, x_max, y_min,
- y_max,
- dx, dy,
- x_skala, y_skala : real ;
- min_pot_x, max_pot_x,
- min_pot_y, max_pot_y,
- null_x, null_y : integer ;
- END ;
- konst_type = ARRAY[1..20] OF k_sin_type ;
- zahl_str_type = ARRAY[1..20] OF str255 ;
- fkt_wert_type = ARRAY[1..600] OF real ;
- error_feld_type = ARRAY[1..600] OF integer ;
- error_str_type = ARRAY[1..30] OF string ;
-
- {-- f. AES - Calls --}
-
- Pointer = ^char ;
- Int_In_Parms = ARRAY[0..15] OF integer ;
- Int_Out_Parms = ARRAY[0..45] OF integer ;
- Addr_In_Parms = ARRAY[0..1] OF Pointer ;
- Addr_Out_Parms = ARRAY[0..0] OF Pointer ;
-
- VAR {-- GEM - Variablen --}
-
- menu_zei : Menu_Ptr ;
- info_zei, lauf_zei, fktein_zei, werte_zei,
- koein_zei, darst_zei, drucker_zei, w1_zei,
- help_zei, warten_zei, ausgabe_zei, w2_zei : Dialog_Ptr ;
- msg : Message_Buffer ;
- titel : Window_Title ;
- window, pushed, event, dummy, button : integer ;
-
- {-- f. AES - Calls --}
-
- int_in : Int_In_Parms ;
- int_out : Int_Out_Parms ;
- addr_out : Addr_Out_Parms ;
- addr_in : Addr_In_Parms ;
-
- {-- Programm - Variablen --}
-
- bild : bild_type ;
- bild_ptr : bild_zeiger ;
- draw : draw_type ;
- zahl_str : zahl_str_type ;
- fkt, var_x, var_y, pfad_akt : str255 ;
- konst : konst_type ;
- fkt_wert : fkt_wert_type ;
- error_feld : error_feld_type ;
- error_str, warn : error_str_type ;
- ergebnis : real ;
- bild_art : (mono, degas) ;
- neu_fkt, low_flag, test_flag, neu_rechnen : boolean ;
- fehler, step, mx, my : integer ;
-
- {$I C:\GEM\GEMSUBS.PAS }
-
-
- {--------------------- Bertiebssystem - Aufrufe ----------------------------}
-
- FUNCTION Bild_ram : Bild_zeiger ; XBIOS (2) ;
-
- FUNCTION IO_Result : integer ; EXTERNAL ;
-
- FUNCTION Set_Printer (config : integer) : integer ; XBIOS (33) ;
-
- FUNCTION Taste_Lesen : integer ; GEMDOS ($07) ;
-
- FUNCTION Taste_Druck : integer ; GEMDOS ($0B) ;
-
- PROCEDURE IO_Check (was : boolean) ; EXTERNAL ;
-
-
- {--------------------- Forward - Deklarationen -------------------------------}
-
- PROCEDURE Do_Funktion_Zeichnen (redraw : boolean) ; FORWARD ;
-
-
- {------------------------ Includen der Module --------------------------------}
-
- {$I A:\FUNKTION\PARSER.PAS }
- {$I A:\FUNKTION\GEMHELP.PAS }
- {$I C:\DRAW.PAS }
-
-
- {---- Do_Init ----------------------------------------------------------------}
-
- PROCEDURE Do_Init ;
-
- VAR config : integer ;
- par_datei : text ;
-
- BEGIN
- {-- Buttons und Flags setzen --}
-
- draw.verb := true ;
- draw.x_log := false ;
- draw.y_log := false ;
- draw.auto := false ;
- draw.achsen_art := netz ;
-
- {-- Häkchen im Menü --}
-
- Menu_Check (menu_zei, mfdegas, true) ;
- bild_art := degas ;
- Menu_Check (menu_zei, mfktneu, true) ;
- neu_fkt := true ;
-
- {-- Zeichengrenzen defaulten --}
-
- Set_DText (werte_zei, zxmin, '-10', System_Font, TE_Left) ;
- Set_DText (werte_zei, zxmax, '10', System_Font, TE_Left) ;
- Set_DText (werte_zei, zymin, '-10', System_Font, TE_Left) ;
- Set_DText (werte_zei, zymax, '10', System_Font, TE_Left) ;
-
- Set_DText (werte_zei, wskalax, '1', System_Font, TE_Left) ;
- Set_DText (werte_zei, wskalay, '1', System_Font, TE_Left) ;
-
- draw.x_min := -10 ;
- draw.x_max := 10 ;
- draw.y_min := -10 ;
- draw.y_max := 10 ;
-
- draw.x_skala := 1 ;
- draw.y_skala := 1 ;
-
- {-- Pfadname --}
-
- IO_Check (false) ;
- RESET (par_datei, 'FUNKTION.INF') ;
- IO_Check (true) ;
- IF IO_Result = 0 THEN
- readln (par_datei, pfad_akt)
- ELSE
- pfad_akt := 'A:\BILDER\' ;
- Set_DText (lauf_zei, lpfad, pfad_akt, System_Font, TE_Left) ;
-
- {-- Druckeranpassung --}
-
- low_flag := true ;
- Obj_SetState (drucker_zei, bp980, selected, false) ;
- test_flag := true ;
- Obj_SetState (drucker_zei, dqtest, selected, false) ;
-
- config := Set_Printer (-1) ;
- IF (config & $0004) <> 0 THEN config := config - 4 ;
- IF (config & $0008) <> 0 THEN config := config - 8 ;
- config := config | $0004 ;
- config := Set_Printer (config) ;
-
- {-- Sonstiges --}
-
- konst[1].name := 'ende' ;
- fkt := 'sin(x)' ;
- Set_DText (fktein_zei, funkt, 'sin(x)', System_Font, TE_Left) ;
-
- var_x := 'x' ;
- Set_DText (fktein_zei, fvarx, 'x', System_Font, TE_Left) ;
- Obj_SetState (fktein_zei, fvary, disabled, false) ; { 2.Variable disabled }
-
- step := 5 ;
- Set_DText (warten_zei, wstepfel, '5', System_Font, TE_Center) ;
- neu_rechnen := true ;
- END ;
-
-
- {---- Do_Init_Warnungen : Setzt Warnungstexte zu Beginn d. Programms ---------}
-
- PROCEDURE Do_Init_Warnungen ;
-
- BEGIN
- warn[ 1] := '[3][ Ungültige x-Grenzen !! ][ verstanden ]' ;
- warn[ 2] := '[3][ Log. Einteilung x muß > 0 sein ! ][ ok ]' ;
- warn[ 3] := '[3][ Ungültige y-Grenzen !! ][ verstanden ]' ;
- warn[ 4] := '[3][ Log. Einteilung y muß > 0 sein ! ][ ok ]' ;
- warn[11] := '[3][ Sinnvolle x-Skalierung, was !! ][ ahh ]' ;
- warn[12] := '[3][ Sinnvolle y-Skalierung, was !! ][ ahh ]' ;
- warn[13] := '[3][ Skalierung 0 ist auch schön ... ][ na gut ]' ;
- warn[21] := '[3][ Berechnung wurde abgebrochen .. ][ ach so ] ' ;
- warn[22] := '[3][ Ich sehe kein altes Koordinatenkreuz, DU ? ][ hmm ] ' ;
- END ;
-
-
- {---- Do_Eingabe_Konstanten : Eingabe der erkannten Konstanten ---------------}
-
- PROCEDURE Do_Eingabe_Konstanten ;
-
- VAR index : integer ;
- erfolg : boolean ;
-
- BEGIN
- index := 1 ;
- WHILE konst[index].name <> 'ende' DO
- BEGIN
- Set_DText (koein_zei, kname, konst[index].name, System_Font, TE_Center) ;
- Set_DText (koein_zei, kwert, zahl_str[index], System_Font, TE_Center) ;
- IF index = 1 THEN pushed := Do_Dialog (koein_zei, kwert)
- ELSE
- BEGIN
- Obj_SetState (koein_zei, kname, disabled, false) ;
- Obj_SetState (koein_zei, kname, normal, true) ;
- Obj_SetState (koein_zei, kwert, disabled, false) ;
- Obj_SetState (koein_zei, kwert, normal, true) ;
- pushed := Redo_Dialog (koein_zei, kwert) ;
- END ;
- Obj_SetState (koein_zei, pushed, normal, true) ;
- erfolg := Zahl_Einlesen (koein_zei, kwert, konst[index].wert) ;
- Get_DEdit (koein_zei, kwert, zahl_str[index]) ;
- IF erfolg THEN index := index + 1 ;
- END ;
- End_Dialog (koein_zei) ;
- END ;
-
-
- {---- Do_Eingabe_Grenzen : Regelt die Eingabe der Zeichenparameter -----------}
-
- PROCEDURE Do_Eingabe_Grenzen (user : boolean) ;
-
- VAR err_pos : integer ;
- erfolg : boolean ;
- help, help_1, help_2 : real ;
-
- BEGIN
- pushed := Do_Dialog (werte_zei, zxmin) ;
- LOOP
- Obj_SetState (werte_zei, pushed, normal, true) ;
- erfolg := true ;
- err_pos := -1 ;
-
- erfolg := Zahl_Einlesen (werte_zei, zxmin, help_1) ;
- IF NOT erfolg THEN err_pos := zxmin ;
- erfolg := Zahl_Einlesen (werte_zei, zxmax, help_2) ;
- IF NOT erfolg THEN err_pos := zxmax ;
- erfolg := Zahl_Einlesen (werte_zei, zymin, help) ;
- IF NOT erfolg THEN err_pos := zymin ;
- erfolg := Zahl_Einlesen (werte_zei, zymax, help) ;
- IF NOT erfolg THEN err_pos := zymax ;
-
- erfolg := Zahl_Einlesen (werte_zei, wskalax, help) ;
- IF NOT erfolg THEN err_pos := wskalax ;
- erfolg := Zahl_Einlesen (werte_zei, wskalay, help) ;
- IF NOT erfolg THEN err_pos := wskalay ;
-
- EXIT IF err_pos = -1 ;
- pushed := Redo_Dialog (werte_zei, err_pos) ;
- END ;
- End_Dialog (werte_zei) ;
-
- IF neu_fkt AND user THEN
- BEGIN
- IF (help_1 <> draw.x_min) OR (help_2 <> draw.x_max) OR neu_rechnen THEN
- BEGIN
- button := Do_Alert
- ('[3][ Funktion muß neu | berechnet werden ][ OK ]', 1) ;
- neu_rechnen := true ;
- END
- ELSE
- Do_Funktion_Zeichnen (true) ;
- END ;
- END ;
-
-
- {---- Do_Eingabe_Funktion : Eingabe der zu zeichnenden Funktion --------------}
-
- PROCEDURE Do_Eingabe_Funktion ;
-
- VAR fehler_str : str255 ;
- error : integer ;
- fehler : boolean ;
-
- BEGIN
- neu_rechnen := true ;
- fehler_str :=
- ' ' ;
- Set_DText (fktein_zei, fehlpos, fehler_str, System_Font, TE_Center) ;
- pushed := Do_Dialog (fktein_zei, funkt) ;
- Obj_SetState (fktein_zei, pushed, normal, true) ;
- Get_DEdit (fktein_zei, funkt, fkt) ;
- Get_DEdit (fktein_zei, fvarx, var_x) ;
- Get_DEdit (fktein_zei, fvary, var_y) ;
-
- fehler := Fkt_Analyse (fkt, konst, var_x, var_y) ;
- error := Do_Berechnen (fkt, konst, 0.5, 0.5, var_x, var_y, ergebnis) ;
-
- WHILE error > 0 DO
- BEGIN
- fehler_str[error] := '^' ;
- Set_DText (fktein_zei, fehlpos, fehler_str, System_Font, TE_Center) ;
- Obj_SetState (fktein_zei, fehlpos, disabled, true) ;
- Obj_SetState (fktein_zei, fehlpos, normal, true) ;
- fehler_str[error] := ' ' ;
-
- pushed := Redo_Dialog (fktein_zei, funkt) ;
- Obj_SetState (fktein_zei, pushed, normal, true) ;
- Get_DEdit (fktein_zei, funkt, fkt) ;
-
- fehler := Fkt_Analyse (fkt, konst, var_x, var_y) ;
- error := Do_Berechnen (fkt, konst, 0.5, 0.5, var_x, var_y, ergebnis) ;
- END ;
- Get_DEdit (fktein_zei, fvarx, var_x) ;
- Get_DEdit (fktein_zei, fvary, var_y) ;
- End_Dialog (fktein_zei) ;
-
- IF konst[1].name <> 'ende' THEN Do_Eingabe_Konstanten ;
- Do_Screen_Aktualisieren ;
- Draw_Menu (menu_zei) ;
- Do_Eingabe_Grenzen (false) ;
- END ;
-
-
- {---- Do_Set_Pfad : Eingabe des gewünschten Pfades ---------------------------}
-
- PROCEDURE Do_Set_Pfad ;
-
- VAR par_datei : text ;
-
- BEGIN
- pushed := Do_Dialog (lauf_zei, lpfad) ;
- Obj_SetState (lauf_zei, pushed, normal, true) ;
- Get_DEdit (lauf_zei, lpfad, pfad_akt) ;
- IF pushed = lsave THEN
- BEGIN
- Set_Mouse (M_Bee) ;
- REWRITE (par_datei, 'FUNKTION.INF') ;
- writeln (par_datei, pfad_akt) ;
- Set_Mouse (M_Arrow) ;
- END ;
- End_Dialog (lauf_zei) ;
- END ;
-
-
- {---- Do_Parameter : Übernimmt Parameter vom Dialog --------------------------}
-
- PROCEDURE Do_Parameter ;
-
- VAR help_flag, dummy_flag : boolean ;
-
- BEGIN
- help_flag := draw.x_log ;
- pushed := Do_Dialog (darst_zei, 0) ;
- Obj_SetState (darst_zei, pushed, normal, true) ;
- End_Dialog (darst_zei) ;
- Test_Button (darst_zei, dalogx, draw.x_log) ;
- Test_Button (darst_zei, dalogy, draw.y_log) ;
- Test_Button (darst_zei, papuver, draw.verb) ;
- Test_Button (darst_zei, danetz, dummy_flag) ;
- IF dummy_flag THEN draw.achsen_art := netz ;
- Test_Button (darst_zei, daohne, dummy_flag) ;
- IF dummy_flag THEN draw.achsen_art := ohne ;
- Test_Button (darst_zei, daskal, dummy_flag) ;
- IF dummy_flag THEN draw.achsen_art := skala ;
- Test_Button (darst_zei, daautoy, draw.auto) ;
-
- {-- Verändern, je nach Flags --}
-
- IF draw.x_log THEN
- Obj_SetState (werte_zei, wskalax, disabled, false)
- ELSE
- Obj_SetState (werte_zei, wskalax, normal, false) ;
- IF draw.y_log THEN
- Obj_SetState (werte_zei, wskalay, disabled, false)
- ELSE
- Obj_SetState (werte_zei, wskalay, normal, false) ;
-
- IF draw.auto THEN
- BEGIN
- Obj_SetState (werte_zei, zymin, disabled, false) ;
- Obj_SetState (werte_zei, zymax, disabled, false) ;
- END
- ELSE
- BEGIN
- Obj_SetState (werte_zei, zymin, normal, false) ;
- Obj_SetState (werte_zei, zymax, normal, false) ;
- END ;
-
- IF neu_fkt THEN
- BEGIN
- IF (help_flag <> draw.x_log) OR neu_rechnen THEN
- BEGIN
- button := Do_Alert
- ('[3][ Funktion muß neu | berechnet werden ][ OK ]', 1) ;
- neu_rechnen := true ;
- END
- ELSE
- Do_Funktion_Zeichnen (true) ;
- END ;
- END ;
-
-
- {---- Do_Berechnen_Funktion --------------------------------------------------}
-
- FUNCTION Do_Berechnen_Funktion : integer ;
-
- VAR i, falsch : integer ;
- wert_x : real ;
-
- BEGIN
- Show_Mouse ;
- Set_DText (warten_zei, werror, ' ', System_Font, TE_Center) ;
- pushed := Do_Dialog (warten_zei, 0) ;
-
- WHILE (pushed = wstepplu) OR (pushed = wstepmin) DO
- BEGIN
- CASE pushed OF
- wstepmin : IF step > 1 THEN step := step - 1 ;
- wstepplu : IF step < 300 THEN step := step + 1 ;
- END ;
- Do_Aktualisieren (warten_zei, wstepfel, step) ;
- pushed := Redo_Dialog (warten_zei, 0) ;
- END ;
- Hide_Mouse ;
-
- IF pushed = wsinja THEN
- write (CHR(27),'Y',CHR(41),CHR(53),' Noch kein nicht definierter Wert ! ') ;
-
- IF pushed = wsindru THEN
- BEGIN
- REWRITE (output, 'PRN:') ;
- writeln (' Singularitaeten von : y(', var_x,') = ', fkt) ;
- writeln ; writeln ;
- REWRITE (output, 'CON:') ;
- END ;
-
- i := 1 ;
- WHILE i <= 600 DO
- BEGIN
- IF draw.x_log THEN wert_x := EXP (((i-draw.null_x) / draw.dx) * LN (10))
- ELSE wert_x := (i - draw.null_x) / draw.dx ;
- falsch := Do_Berechnen (fkt, konst, wert_x, 0, var_x, var_y, fkt_wert[i]) ;
- error_feld[i] := falsch ;
-
- IF (falsch < 0) THEN
- BEGIN
- IF pushed = wsinja THEN
- BEGIN
- write (CHR(27),'Y',CHR(41),CHR(52),'Nicht defininierter Wert bei : ',
- wert_x :10:6) ;
- Set_DText (warten_zei, werror, error_str[ABS(falsch)], System_Font,
- TE_Center) ;
- Obj_SetState (warten_zei, werror, disabled, false) ;
- Obj_SetState (warten_zei, werror, normal, true) ;
- END ;
-
- IF pushed = wsindru THEN
- BEGIN
- REWRITE (output, 'PRN:') ;
- writeln (' Bei x = ', wert_x:10:6, ' Grund : ',
- error_str[ABS(falsch)]) ;
- REWRITE (output, 'CON:') ;
- END ;
- END ;
- i := i + step ;
- IF Taste_Druck = -1 THEN
- BEGIN
- IF Taste_Lesen = ORD(' ') THEN
- BEGIN
- button := Do_Alert ('[2][ Wirklich abbrechen ? ][ Ja | Nein ]', 2) ;
- IF button = 1 THEN i := 999 ;
- END ;
- END ;
- END ;
- Obj_SetState (warten_zei, pushed, normal, true) ;
- End_Dialog (warten_zei) ;
-
- IF i = 999 THEN Do_Berechnen_Funktion := 21
- ELSE
- BEGIN
- Do_Berechnen_Funktion := 0 ;
- neu_rechnen := false ;
- END ;
- END ;
-
-
- {---- Do_Funktion_Zeichnen ---------------------------------------------------}
-
- PROCEDURE Do_Funktion_Zeichnen ; { -- wurde FORWARD deklariert !! -- }
-
- VAR old_kreuz : boolean ;
- fehler : integer ;
-
- BEGIN
- old_kreuz := false ; fehler := 0 ;
-
- IF NOT redraw THEN
- BEGIN
- button := Do_Alert
- ('[3][Altes Koordinatenkreuz | verwenden ?][ Ja | Nein ]', 2) ;
- IF button = 1 THEN old_kreuz := true ;
- IF (draw.dx = draw.dy) AND Old_Kreuz THEN fehler := 22 ;
- END ;
-
- Hide_Mouse ;
-
- IF Old_Kreuz THEN
- BEGIN
- IF fehler = 0 THEN fehler := Do_Berechnen_Funktion ;
- Do_Screen_Aktualisieren ;
- IF fehler = 0 THEN Do_Draw_Funktion (draw, fkt_wert, error_feld, step)
- ELSE button := Do_Alert (warn[fehler], 1) ;
- END
- ELSE
- BEGIN
- IF NOT redraw THEN
- BEGIN
- fehler := Do_x_Koordinaten (draw, fkt_wert);
- IF fehler = 0 THEN fehler := Do_Berechnen_Funktion ;
- END ;
- IF fehler = 0 THEN fehler := Do_y_Koordinaten (draw, fkt_wert) ;
- IF fehler = 0 THEN
- BEGIN
- write (CHR(27), 'E') ;
- Do_Draw_Funktion (draw, fkt_wert, error_feld, step) ;
- END
- ELSE button := Do_Alert (warn[fehler], 1) ;
- END ;
-
- Draw_Menu (menu_zei) ;
- Show_Mouse ;
- END ;
-
-
- {---- Do_Set_Drucker : Setzt die Druckerparameter ----------------------------}
-
- PROCEDURE Do_Set_Drucker ;
-
- VAR config : integer ;
-
- BEGIN
- pushed := Do_Dialog (drucker_zei, 0) ;
- Obj_SetState (drucker_zei, pushed, normal, true) ;
- End_Dialog (drucker_zei) ;
-
- Test_Button (drucker_zei, bp980, low_flag) ;
- Test_Button (drucker_zei, dqtest, test_flag) ;
-
- config := Set_Printer (-1) ;
- IF (config & $0004) <> 0 THEN config := config - 4 ;
- IF (config & $0008) <> 0 THEN config := config - 8 ;
- IF low_flag THEN config := config | $0004 ;
- IF NOT test_flag THEN config := config | $0008 ;
- config := Set_Printer (config) ;
-
- END ;
-
-
- {---- Do_Drucken : Druckt das Bild aus ---------------------------------------}
-
- PROCEDURE Do_Drucken ;
-
- PROCEDURE Hard_Copy ; XBIOS (20) ;
-
- BEGIN
- Hide_Mouse ;
- Do_Screen_Aktualisieren ;
- Hard_Copy ;
- Draw_Menu (menu_zei) ;
- Show_Mouse ;
- END ;
-
-
- {---- Do_Save_Bild : Speichert Bild auf Diskette -----------------------------}
-
- PROCEDURE Do_Save_Bild ;
-
- VAR datei_name, maske : str255 ;
- bild_datei : FILE OF integer ;
- index : integer ;
- count : long_integer ;
-
- BEGIN
- IF bild_art = mono THEN maske := CONCAT (pfad_akt, '*.ART') ;
- IF bild_art = degas THEN maske := CONCAT (pfad_akt, '*.PI3') ;
- IF Get_In_File (maske, datei_name) THEN
- BEGIN
- Do_Screen_Aktualisieren ;
- Draw_Menu (menu_zei) ;
- Set_Mouse (M_Bee) ;
- REWRITE (bild_datei, datei_name) ;
- IF bild_art = degas THEN
- BEGIN
- bild_datei^ := 2 ; put (bild_datei) ; { Auflösung }
-
- bild_datei^ := 1 ; put (bild_datei) ;
- FOR index := 1 TO 15 DO
- BEGIN
- bild_datei^ := 0 ;
- put (bild_datei) ;
- END ;
- END ;
- FOR index := 0 TO 15999 DO
- BEGIN
- bild_datei^ := bild[index] ;
- put (bild_datei) ;
- END ;
- Set_Mouse (M_Arrow) ;
- END ;
- END ;
-
-
- {---- Do_Erase_Bild : Löscht File von der Diskette ---------------------------}
-
- PROCEDURE Do_Erase_Bild ;
-
- VAR maske, datei_name, alarm : str255 ;
- bild_datei : FILE OF integer ;
-
- BEGIN
- maske := CONCAT (pfad_akt, '*.*') ;
- IF Get_In_File (maske, datei_name) THEN
- BEGIN
- Do_Screen_Aktualisieren ;
- Draw_Menu (menu_zei) ;
- alarm := CONCAT ('[2][ Die Bilddatei | ', datei_name,
- ' | wirklich löschen ? ][ Ja | Nein ]') ;
- button := Do_Alert (alarm, 2) ;
- IF button = 1 THEN
- BEGIN
- Set_Mouse (M_Bee) ;
- IO_Check (false) ;
- RESET (bild_datei, datei_name) ;
- IO_Check (true) ;
- IF IO_Result = 0 THEN
- ERASE (bild_datei) ;
- Set_Mouse (M_Arrow) ;
- END ;
- END ;
- END ;
-
-
- {---- Do_Show_Koordinaten : Zeigt Koordinaten -------------------------------}
-
- PROCEDURE Do_Show_Koordinaten ;
-
- VAR x, y, butt, key : integer ;
- re_x, re_y : real ;
-
- BEGIN
- Erase_Menu (menu_zei) ;
- Objc_Draw (ausgabe_zei) ;
- IF (draw.dx <> 0) AND (draw.dy <> 0) THEN
- BEGIN
- REPEAT
- Mouse_State (x, y, butt, key) ;
- IF draw.x_log THEN
- re_x := EXP (((x-20-draw.min_pot_x-draw.null_x) / draw.dx) * LN(10))
- ELSE re_x := ((x-20) - draw.null_x) / draw.dx ;
- IF draw.y_log THEN
- re_y := EXP (((399-y+draw.min_pot_x-draw.null_y) / draw.dy) * LN(10))
- ELSE re_y := ((399-y) - draw.null_y) / draw.dy ;
- write (CHR(27), 'Y', CHR(32+4), CHR(32+54), var_x, ' : ', re_x:13:9) ;
- write (CHR(27), 'Y', CHR(32+5), CHR(32+54), 'f(',var_x,'): ', re_y:13:9) ;
- UNTIL butt = 1 ;
- END
- ELSE
- button := Do_Alert
- ('[3][Nicht so hudelig, erst | mal was zeichnen !][ Grrrr ]', 1) ;
- End_Dialog (ausgabe_zei) ;
- END ;
-
-
- {---- Event_Loop : Überwacht das Menü und mögliches Redraw -------------------}
-
- PROCEDURE Event_Loop ;
-
- BEGIN
- WHILE true DO
- BEGIN
- event := Get_Event (E_MESSAGE, 0, 0, 0, 0, false, 0, 0, 0, 0,
- false, 0, 0, 0, 0, msg, dummy, dummy, dummy,
- dummy, dummy, dummy) ;
-
- IF msg[0] = MN_Selected THEN
- BEGIN
- CASE msg[4] OF
- minfo : Do_Show_Info ;
- mende : Do_Abbruch ;
- mhelp : Do_Show_Help ;
- mfktein : Do_Eingabe_Funktion ;
- meinkon : Do_Eingabe_Konstanten ;
- meingre : Do_Eingabe_Grenzen (true) ;
- mlauf : Do_Set_Pfad ;
- mdarstel : Do_Parameter ;
- mfktzei : Do_Funktion_Zeichnen (false) ;
- mdruzei : Do_Drucken ;
- mdruein : Do_Set_Drucker ;
- msavepic : Do_Save_Bild ;
- merapic : Do_Erase_Bild ;
- mscann : Do_Show_Koordinaten ;
- mwurm : Do_Show_Wurminfo ;
- mfdegas : BEGIN
- Menu_Check (menu_zei, mfdegas, true) ;
- Menu_Check (menu_zei, mfmono, false) ;
- bild_art := degas ;
- END ;
- mfmono : BEGIN
- Menu_Check (menu_zei, mfmono, true) ;
- Menu_Check (menu_zei, mfdegas, false) ;
- bild_art := mono ;
- END ;
- mfktneu : BEGIN
- neu_fkt := NOT neu_fkt ;
- Menu_Check (menu_zei, mfktneu, neu_fkt) ;
- IF neu_fkt THEN Do_Funktion_Zeichnen (true) ;
- END ;
- END ;
- Menu_Normal (menu_zei, msg[3]) ;
- END ;
-
- IF msg[0] = WM_Redraw THEN
- BEGIN
- Do_Screen_Aktualisieren ;
- Draw_Menu (menu_zei) ;
- END ;
-
- END ;
- END ;
-
-
- {-------------------- H a u p t p r o g r a m m ----------------------------}
-
- BEGIN
- IF Init_Gem >= 0 THEN
- BEGIN
- IF NOT Load_Resource ('FUNKTION.RSC') THEN
- BEGIN
- button := Do_Alert ('[3][RSC-File defekt !][ Abbruch ]',0) ;
- Exit_Gem ;
- Halt ;
- END ;
-
-
- Find_Menu (menu, menu_zei) ;
-
- window := New_Window (0, titel, 0, 0, 0, 0) ;
- Open_Window (window, 0, 0, 0, 0) ;
- bild_ptr := Bild_Ram ;
-
- Find_Dialog (infobox, info_zei) ; Center_Dialog (info_zei) ;
- Find_Dialog (lauf, lauf_zei) ; Center_Dialog (lauf_zei) ;
- Find_Dialog (fktein, fktein_zei) ; Center_Dialog (fktein_zei) ;
- Find_Dialog (werte, werte_zei) ; Center_Dialog (werte_zei) ;
- Find_Dialog (koein, koein_zei) ; Center_Dialog (koein_zei) ;
- Find_Dialog (darst, darst_zei) ; Center_Dialog (darst_zei) ;
- Find_Dialog (drucker, drucker_zei) ; Center_Dialog (drucker_zei) ;
- Find_Dialog (help, help_zei) ; Center_Dialog (help_zei) ;
- Find_Dialog (warten, warten_zei) ; Center_Dialog (warten_zei) ;
- Find_Dialog (wurm1, w1_zei) ; Center_Dialog (w1_zei) ;
- Find_Dialog (wurm2, w2_zei) ; Center_Dialog (w2_zei) ;
- Find_Dialog (ausgabe, ausgabe_zei) ;
-
- Do_Init ;
- Do_Init_Error ;
- Do_Init_Warnungen ;
- Init_Mouse ;
-
- Event_Loop ;
-
- END ;
- END.
-